package com.rayboo.example.reflect;

/**
 * 反射获取Class对象
 *
 * <p>https://cloud.tencent.com/developer/article/1403411
 */
public class Classes {

    public static void main(String[] args) {
        // ① Class c1 = stu.getClass(); 已知该类的对象通过getClass方法（知道对象时用）

        //new Student() 产生一个Student对象，一个Class对象。
        Student stu1 = new Student();
        //获取Class对象
        Class stuClass = stu1.getClass();
        System.out.println(stuClass.getName());

        // ② Class c2 = Student.class; 实际告诉我们任何一个类都有一个隐含的静态成员变量class（知道类名时用）
        Class stuClass2 = Student.class;
        //判断第一种方式获取的Class对象和第二种方式获取的是否是同一个
        System.out.println(stuClass == stuClass2);

        // ③Class c3 = Class.forName("类的全名"); 会有一个ClassNotFoundException异常
        try {
            //注意此字符串必须是真实路径，就是带包名的类路径，包名.类名
            Class stuClass3 = Class.forName("com.rayboo.example.reflect.Student");
            //判断三种方式是否获取的是同一个Class对象
            System.out.println(stuClass3 == stuClass2);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}
